package com.cskaoyan.connectionpool;

import com.cskaoyan.util.JDBCUtils;

import java.sql.Connection;
import java.util.LinkedList;

/**
 * 创建日期: 2022/07/27 11:48
 *
 * @author ciggar
 *
 * 自己实现的数据库连接池
 * 扩容功能
 */
public class MyConnectionPoolV2 {

    // 维护一个容器 这个容器里面放的是连接对象
    // 从头部存，从尾部取
    static LinkedList<Connection> pool;

    static {

        // 初始化数据库连接池

        // 1. 创建实例对象
        pool = new LinkedList<>();

        // 2. 给连接池添加连接
        addCapacity(10);

    }



    // 获取连接
    public static Connection getConnection(){

        // 判断是否需要扩容
        if (pool.size() < 2) {
            addCapacity(5);
        }


        Connection connection = pool.removeLast();
        return connection;
    }



    // 回收连接
    public static void recyleConnection(Connection connection){
        pool.addFirst(connection);
    }



    // 增加容量
    private static void addCapacity(int nums){

        if (pool == null) return;
        for (int i = 0; i < nums; i++) {
            Connection connection = JDBCUtils.getConnection();
            pool.addFirst(connection);
        }
    }


}
